package models;

import java.sql.Date;
import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import play.db.jpa.Model;

@Entity
public class Tarefa extends Model {

	private int hora;
	private int minuto;

	private String tituloTarefa;
	private String descricao;
	private Date dataInicio;
	private double tempoEstimado;
	private double tempoTotalTrabalho;
	private int prioridade;
	private double porcentagem;
	private Date dataCadastro;
	private boolean novaTarefa;

	@Enumerated(EnumType.STRING)
	private GrauTarefaEnum grauTarefa;

	// @OneToOne
	@Enumerated(EnumType.STRING)
	private TipoTarefaEnum tipoTarefa;
	// @OneToOne
	@Enumerated(EnumType.STRING)
	private StatusTarefaEnum status;

	@ManyToOne
	@JoinColumn(name = "usuario_id")
	private Usuario usuario;

	@ManyToOne
	@JoinColumn(name = "projeto_id")
	private Projeto projeto;

	@OneToMany(mappedBy = "tarefa")
	private Collection<LogsTarefa> logsTarefas;

	public Tarefa(int hora, int minuto, String tituloTarefa, String descricao,
			Date dataInicio, double tempoEstimado, boolean novaTarefa,
			double tempoTotalTrabalho, int prioridade, double porcentagem,
			Date dataCadastro, GrauTarefaEnum grauTarefa,
			TipoTarefaEnum tipoTarefa, StatusTarefaEnum status, Usuario usuario,
			Projeto projeto) {
		super();
		this.hora = hora;
		this.minuto = minuto;
		this.tituloTarefa = tituloTarefa;
		this.descricao = descricao;
		this.dataInicio = dataInicio;
		this.tempoEstimado = tempoEstimado;
		this.novaTarefa = novaTarefa;
		this.tempoTotalTrabalho = tempoTotalTrabalho;
		this.prioridade = prioridade;
		this.porcentagem = porcentagem;
		this.dataCadastro = dataCadastro;
		this.grauTarefa = grauTarefa;
		this.tipoTarefa = tipoTarefa;
		this.status = status;
		this.usuario = usuario;
		this.projeto = projeto;
	}

	public int getHora() {
		return this.hora;
	}

	public void setHora(int hora) {
		this.hora = hora;
	}

	public int getMinuto() {
		return this.minuto;
	}

	public void setMinuto(int minuto) {
		this.minuto = minuto;
	}

	public String getTituloTarefa() {
		return this.tituloTarefa;
	}

	public void setTituloTarefa(String tituloTarefa) {
		this.tituloTarefa = tituloTarefa;
	}

	public String getDescricao() {
		return this.descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getDataInicio() {
		return this.dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	public double getTempoEstimado() {
		return this.tempoEstimado;
	}

	public void setTempoEstimado(double tempoEstimado) {
		this.tempoEstimado = tempoEstimado;
	}

	public boolean isNovaTarefa() {
		return this.novaTarefa;
	}

	public void setNovaTarefa(boolean novaTarefa) {
		this.novaTarefa = novaTarefa;
	}

	public double getTempoTotalTrabalho() {
		return this.tempoTotalTrabalho;
	}

	public void setTempoTotalTrabalho(double tempoTotalTrabalho) {
		this.tempoTotalTrabalho = tempoTotalTrabalho;
	}

	public int getPrioridade() {
		return this.prioridade;
	}

	public void setPrioridade(int prioridade) {
		this.prioridade = prioridade;
	}

	public double getPorcentagem() {
		return this.porcentagem;
	}

	public void setPorcentagem(double porcentagem) {
		this.porcentagem = porcentagem;
	}

	public Date getDataCadastro() {
		return this.dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public GrauTarefaEnum getGrauTarefa() {
		return this.grauTarefa;
	}

	public void setGrauTarefa(GrauTarefaEnum grauTarefa) {
		this.grauTarefa = grauTarefa;
	}

	public TipoTarefaEnum getTipoTarefa() {
		return this.tipoTarefa;
	}

	public void setTipoTarefa(TipoTarefaEnum tipoTarefa) {
		this.tipoTarefa = tipoTarefa;
	}

	public StatusTarefaEnum getStatus() {
		return this.status;
	}

	public void setStatus(StatusTarefaEnum status) {
		this.status = status;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Projeto getProjeto() {
		return this.projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	public Collection<LogsTarefa> getLogsTarefas() {
		return this.logsTarefas;
	}

	public void setLogsTarefas(Collection<LogsTarefa> logsTarefas) {
		this.logsTarefas = logsTarefas;
	}
}
